package chapter05

import scala.annotation.tailrec

object Test10_Recursion {

  def main(args: Array[String]): Unit = {

    println(fact(5))
    println(tailFact(5))
  }

  // 1.递归实现实现阶乘
  def fact(n: Int): Int = {
    if (n == 0) return 1
    n * fact(n - 1)
  }

  // 2.尾递归实现阶乘，java不支持
  def tailFact(n: Int): Int = {
    //@tailrec 用于判断是否是一个合法的尾递归
    @tailrec
    def loop(n: Int, currRes: Int): Int = {
      if (n == 0) return currRes
      loop(n - 1, currRes * n)
    }
    loop(n, 1)
  }
}
